#pragma once
#include <chrono>
#include <unordered_map>
#include <mutex>
#include <cstdint>

/**
 * @brief 简单的令牌桶限流器
 * 
 * 用于防止某个用户频繁上下线造成的消息风暴
 */
class RateLimiter
{
public:
    /**
     * @brief 检查是否允许执行操作
     * @param key 限流的键（例如用户ID）
     * @param maxOps 最大操作次数
     * @param windowMs 时间窗口（毫秒）
     * @return true=允许, false=被限流
     */
    static bool allowOp(uint64_t key, int maxOps = 10, int windowMs = 1000);
    
private:
    struct LimitInfo {
        int count;
        std::chrono::steady_clock::time_point windowStart;
    };
    
    static std::unordered_map<uint64_t, LimitInfo> s_limits;
    static std::mutex s_mutex;
};

